"Les cours de neeko.fr"

Retour en haut

Java, rappels sur les classes : La correction du quiz

Les exercices sont indépendants.

1/ Si le code suivant est valide, à quoi ressemble au minimum la déclaration de la classe "Humain" ?

Humain utilisateur1 = new Humain(); utilisateur1.nom = "Chico"; Humain utilisateur2 = new Humain(); utilisateur2.nom = "Roberta";

Au vu du code, on ne peut être sûr que de l'existence de la classe "Humain", et qu'elle possède un membre public de type String nommé "nom" :

class Humain { public String nom; }

On peux bien sur penser que la classe possède d'autres méthodes et puisse hériter d'une autre classe, mais rien ne nous le prouve.

2/ Si le code suivant est valide, à quoi ressemble la signature de la méthode "estMajeur" de la classe "AdministrationFrancaise" ?

Humain utilisateur1 = new Humain(); utilisateur1.nom = "Chico"; utilisateur1.age = 34; AdministrationFrancaise administration = new AdministrationFrancaise(); if (administration.estMajeur(utilisateur1.age)) { System.out.println(utilisateur1.nom + " est majeur en france !"); }

Vu que la méthode est utilisée directement dans une condition, on est sûr du type de retour, et on peut déduire logiquement le type de son unique parametre.

public boolean estMajeur(int uneVariablePourStockerAge)

A noter que l'on ne peux pas deviner le nom du paramètre.

3/ Si le code suivant est valide, à quoi ressemble la signature de la méthode "estPlusAge" de la classe "Humain" ?

Humain utilisateur1 = new Humain(); utilisateur1.nom = "Chico"; utilisateur1.age = 34; Humain utilisateur2 = new Humain(); utilisateur2.nom = "Roberta"; utilisateur2.age = 35; if (utilisateur1.estPlusAge(utilisateur2)) { System.out.println(utilisateur1.nom + " est plus vieux que " + utilisateur2.nom); }

Mêmes arguments que pour la question précédente.

public boolean estPlusAge(Humain unHumain)

4/ Avec les déclarations suivantes, le code est-il valide ?

Vehicule opelCorsa = new Voiture(); opelCorsa.demarrer(); opelCorsa.accelerer(); opelCorsa.freiner();

Déclarations (valides)

public interface Vehicule { public void accelerer(); public void freiner(); }

public class Voiture implements Vehicule { public void demarrer(){ System.out.print("br-br-broooom"); } public void accelerer(){ System.out.print("vroooom"); } public void freiner(){ System.out.print("hiiiiiiii"); } }

Non, il n'est pas valide car la méthode demarrer() n'est pas définie par l'interface Vehicule. Ici, on manipule une instance de Voiture dans une variable de type Vehicule, on n'a donc seulement le droit d'apeller les méthodes définient par l'interface Vehicule.

5/ Quel sera le résultat affiché de l'execution de ce programme ?

Animal medor = new Chien(); Animal merlin = new Chat(); Animal joAsticot = new Animal(); Chien chuby = new Yorkshire(); Animal brad1 = new Pitbull(); Chien brad2 = new Pitbull(); Pitbull brad3 = new Pitbull(); medor.communiquer(); merlin.communiquer(); joAsticot.communiquer(); chuby.communiquer(); brad1.communiquer(); brad2.communiquer(); brad3.communiquer(); Chenil.faireConnaissance(brad1, chuby);

Déclarations

public class Chenil { static public void faireConnaissance(Animal premier, Animal second){ premier.communiquer(); second.communiquer(); } }

public class Animal { public void communiquer(){ System.out.print("-"); } }

public class Chien extends Animal { public void communiquer(){ System.out.print("wouaf"); } }

public class Chat extends Animal { public void communiquer(){ System.out.print("miiiaou"); } }

public class Yorkshire extends Chien { public void communiquer(){ System.out.print("waf waf waf waf waf"); } }

public class Pitbull extends Chien { public void communiquer(){ System.out.print("WOUAF!"); } }

C'est la classe instanciée qui détermine qu'elle implémentation est appellée, qu'elle que soit la variable dans laquelle on la stocke.

wouaf miiaou - waf waf waf waf waf WOUAF! WOUAF! WOUAF! WOUAF! waf waf waf waf waf

6/ Quel sera le résultat affiché de l'execution de ce programme ?

Visiteur jeannot = new Visiteur(); VisiteGuidee visiteDuMusee = new MuseeDuLouvre(); visiteDuMusee.visite(jeannot);

Déclarations

public interface VisiteGuidee { public void visite(Touriste unTouriste); }

public interface Touriste { public void faireLaQueue(int nombreDeMinutes); public void payer(int valeurEnEuros); public void admirer(String oeuvre, int niveauAdmiration); }

public class MuseeDuLouvre implements VisiteGuidee { public void visite(Touriste unTouriste){ unTouriste.faireLaQueue(60); unTouriste.payer(11); unTouriste.admirer("La Joconde", 1); unTouriste.admirer("La Vénus de Milo", 1); unTouriste.admirer("La carte postale de la pyramide dans la boutique", 5); unTouriste.payer(2); } }

public class MuseeGranet implements VisiteGuidee { public void visite(Touriste unTouriste){ unTouriste.faireLaQueue(10); unTouriste.payer(4); unTouriste.admirer("Les Baigneuses de Paul Cézanne", 1); unTouriste.admirer("L'Autoportrait de Rembrandt", 1); unTouriste.admirer("La carte postale d'une cigale dans la boutique", 5); unTouriste.payer(3); } }

public class Visiteur implements Touriste { public void faireLaQueue(int nombreDeMinutes) { System.out.println("Pas de probleme, j'attends " + nombreDeMinutes + " minutes!" ); } public void payer(int valeurEnEuros) { System.out.println(valeurEnEuros + " ? C'est pas cher ! " ); } public void admirer(String oeuvre, int tempsAdmiration) { for (int i=0; i < niveauAdmiration; i++){ System.out.println(oeuvre + ", c'est magnifique ! " ); } } }

Il faut commencer par identifier quelles classes sont en jeu : ici MuseeDuLouvre et Visiteur. La classe MuseeGranet n'est pas utilisée.

Pas de probleme, j'attends 60 minutes! 11 ? C'est pas cher ! La Joconde, c'est magnifique ! La Vénus de Milo, c'est magnifique ! La carte postale de la pyramide dans la boutique, c'est magnifique ! La carte postale de la pyramide dans la boutique, c'est magnifique ! La carte postale de la pyramide dans la boutique, c'est magnifique ! La carte postale de la pyramide dans la boutique, c'est magnifique ! La carte postale de la pyramide dans la boutique, c'est magnifique ! 2 ? C'est pas cher !

7/ A partir de l'exercice précédent, quelles modifications faudrait-il apporter que "jeannot" visite le musée du louvre puis le musée Granet ?

Visiteur jeannot = new Visiteur(); VisiteGuidee visiteDuMusee = new MuseeDuLouvre(); visiteDuMusee.visite(jeannot);

Il suffit d'instancier la classe MuseeGranet, et d'exécuter la méthode en lui passant notre Visiteur.

Visiteur jeannot = new Visiteur(); VisiteGuidee visiteLouvre = new MuseeDuLouvre(); VisiteGuidee visiteGranet = new MuseeGranet(); visiteLouvre.visite(jeannot); visiteGranet.visite(jeannot);

A noter que l'on pourrait utiliser un tableau ou une List pour faire visiter plusieurs musées à notre Visiteur, mais ce n'était pas précisé ici.